import { ChildProcessWithoutNullStreams } from 'child_process'

/**
 * MakeStyleGenerateDataVO
 */
export interface ImgRes {
  /**
   * MJ(1, "MJ"),     SD(2, "SD"),
   */
  jobModel?: JobModel

  jobType: number
  imgPath: string
  /**
   * sd的生成参数
   */
  sdGenerateDataVO?: CombinedGenerateDatavo

  /**
   * mj的生成参数
   */
  mjgenerateDataVO?: MjRequestvo
}

/**
 * mj的生成参数
 *
 * MjRequestVO
 */
export interface MjRequestvo {
  height?: number
  prompt?: string
  width?: number
}

/**
 * MJ(1, "MJ"),     SD(2, "SD"),
 */
export enum JobModel {
  Mj = 'MJ',
  Sd = 'SD'
}

/**
 * sd的生成参数
 *
 * CombinedGenerateDataVO
 */
export interface CombinedGenerateDatavo {
  clipSkip: string

  /**
   * 始终执行的脚本
   */
  alwaysonScripts?: AlwaysonScripts
  /**
   * 批量大小，默认 1
   */
  batchSize?: number
  /**
   * 提示词引导系数
   */
  cfgScale?: number
  /**
   * 重绘强度，默认 0.75
   */
  denoisingStrength?: number
  /**
   * 是否保存网格，默认 false
   */
  doNotSaveGrid?: boolean
  /**
   * 是否保存样本，默认 false
   */
  doNotSaveSamples?: boolean
  /**
   * Txt2ImgRequestDTO 独有字段
   */
  enableHr?: boolean
  /**
   * η 值，默认 0
   */
  eta?: number
  /**
   * 第一阶段生成的图像高度，默认 0
   */
  firstphaseHeight?: number
  /**
   * 第一阶段生成的图像宽度，默认 0
   */
  firstphaseWidth?: number
  /**
   * 指定任务ID
   */
  forceTaskId?: string
  /**
   * 高度，默认 512
   */
  height?: number
  /**
   * // 高的比例
   */
  heightRatio?: number
  /**
   * 高分辨率模式下的放大倍数，默认 2
   */
  hrScale?: number
  /**
   * 高分辨率模式下的上采样器
   */
  hrUpscaler?: string
  /**
   * 图片引导系数，默认 1.5
   */
  imageCfgScale?: number
  /**
   * 原始图高度
   */
  imageHeight?: number
  /**
   * 原始图宽度
   */
  imageWidth?: number
  /**
   * // 1 调整至指定尺寸    2:按比例调整
   */
  imgAdjustment?: number
  /**
   * Txt2ImgRequestDTO 独有字段
   */
  imgSize?: string
  /**
   * 是否包含初始图像，默认 false
   */
  includeInitImages?: boolean
  /**
   * Img2ImgRequestDTO 独有字段
   */
  initImages?: string[]
  /**
   * 图片地址
   */
  initImageUrls?: string[]
  /**
   * 绘制区域，默认 false
   */
  inpaintFullRes?: boolean
  /**
   * 全分辨率填充，默认 32
   */
  inpaintFullResPadding?: number
  /**
   * 填充模式，默认 0
   */
  inpaintingFill?: number
  /**
   * 蒙版模式，默认 0
   */
  inpaintingMaskInvert?: number
  /**
   * 局部重绘蒙版
   */
  mask?: string
  /**
   * 涂鸦蒙版，默认 0
   */
  maskAlpha?: number
  /**
   * 蒙版模糊度，默认 4
   */
  maskBlur?: number
  /**
   * 局部重绘蒙版地址
   */
  maskUrl?: string
  /**
   * 模式，默认 0:图生图
   */
  mode?: number
  models?: Items[]
  /**
   * 反向提示词
   */
  negativePrompt?: string
  /**
   * 迭代次数，默认 1
   */
  nIter?: number
  /**
   * 覆盖设置
   */
  overrideSettings?: OverrideSettings
  /**
   * 是否恢复覆盖设置，默认 true
   */
  overrideSettingsRestoreAfterwards?: boolean
  /**
   * 正向提示词
   */
  prompt?: string
  /**
   * 缩放模式，默认 0:拉伸
   */
  resizeMode?: number
  /**
   * 是否修复面部，默认 false
   */
  restoreFaces?: boolean
  /**
   * 采样器名称
   */
  samplerName?: string
  /**
   * 是否保存图像，默认 true
   */
  saveImages?: boolean
  /**
   * 调度类型
   */
  scheduler?: string
  /**
   * 随机性控制种子，默认 -1
   */
  seed?: number
  /**
   * 是否发送生成图像，默认 false
   */
  sendImages?: boolean
  /**
   * 采样步数
   */
  steps?: number
  /**
   * 是否使用平铺，默认 false
   */
  tiling?: boolean
  /**
   * 宽度，默认 512
   */
  width?: number
  /**
   * 宽的比例
   */
  widthRatio?: number
}

/**
 * 始终执行的脚本
 *
 * AlwaysonScripts
 */
export interface AlwaysonScripts {
  /**
   * AnimateDiff配置
   */
  animateDiff?: AnimateDiff
  /**
   * ControlNet配置
   */
  controlNet?: ControlNet
}

/**
 * AnimateDiff配置
 *
 * AnimateDiff
 */
export interface AnimateDiff {
  /**
   * AnimateDiff参数
   */
  args?: PurpleArgs[]
}

/**
 * Args[]
 */
export interface PurpleArgs {
  /**
   * 上下文单批数量
   */
  batchSize?: number
  /**
   * 闭环 Closed loop
   */
  closedLoop?: string
  /**
   * #3 启动 Enable AnimateDiff
   */
  enable?: boolean
  /**
   * #2 保存格式，虽然支持多选，但前端只允许单选 "GIF" | ("MP4") | "PNG" | "WEBP" | "WEBM"
   */
  format?: string[]
  /**
   * #5 帧率 FPS
   */
  fps?: number
  /**
   * #11 插针 Frame interpolation, "Off" | "FILM"
   */
  interp?: string
  /**
   * 中间帧数量
   */
  interpX?: number
  /**
   * 显示循环数量
   */
  loopNumber?: number
  /**
   * #1 动画模型
   */
  model?: string
  /**
   * #10 重叠 Overlap
   */
  overlap?: number
  /**
   * #9 步幅Stride
   */
  stride?: number
  /**
   * 总帧数 (需>=上下文单批数量)
   */
  videoLength?: number
}

/**
 * ControlNet配置
 *
 * ControlNet
 */
export interface ControlNet {
  /**
   * ControlNet配置
   */
  args?: FluffyArgs[]
}

/**
 * Args[]
 */
export interface FluffyArgs {
  /**
   * 控制模式
   */
  controlMode?: string
  /**
   * 有效区域图片的id
   */
  effectiveRegionMask?: string
  /**
   * 有效区域图片的地址
   */
  effectiveRegionMaskUrl?: string
  /**
   * #3 启动 Enable AnimateDiff
   */
  enable?: boolean
  /**
   * 默认1(0-1/0.01)
   */
  guidanceEnd?: number
  /**
   * 默认0(0-1/0.01)
   */
  guidanceStart?: number
  /**
   * #1 图片id
   */
  image?: string
  /**
   * 图片地址
   */
  imageUrl?: string
  /**
   * 固定
   */
  lowvram?: boolean
  /**
   * #1 动画模型
   */
  model?: string
  /**
   * #6 预处理器
   */
  module?: string
  /**
   * 默认false
   */
  pixelPerfect?: boolean
  /**
   * 默认512（64-2048/8）
   */
  processorRes?: number
  /**
   * 缩放模式，默认裁剪(Crop and Resize)
   */
  resizeMode?: string
  /**
   * 默认100(1-255/1)
   */
  thresholdA?: number
  /**
   * 默认100(1-255/1)
   */
  thresholdB?: number
  /**
   * #8 默认1(0-2/0.05)
   */
  weight?: number
}

/**
 * com.glasssix.spa.aigc.sd.domain.vo.CombinedGenerateDataVO.Items
 *
 * Items
 */
export interface Items {
  /**
   * 基础模型
   */
  baseModel?: string
  /**
   * 模型名称
   */
  cn?: string
  id?: number
  imgPath?: string
  /**
   * #2lora 3 embedding
   */
  type?: number
  weight?: number
}

/**
 * 覆盖设置
 *
 * OverrideSettings
 */
export interface OverrideSettings {
  /**
   * 基础模型
   */
  baseModel?: string
  /**
   * Clip跳过层，默认 2
   */
  clipStopAtLastLayers?: number
  /**
   * 模型名称
   */
  cn?: string
  /**
   * 模型名称
   */
  imgPath?: string
  /**
   * 模型名称
   */
  sdModelCheckpoint?: string
  sdModelId?: number
  /**
   * VAE，默认 "Automatic"
   */
  sdVae?: string
  type?: number
}

/**
 * 条件
 *
 * GenerationData
 */
export interface GenerationData {
  sdWebV1: { [key: string]: any }
  stabilityAiParams: { [key: string]: any }
  tensorArtV1: TensorArtv1dto
  type: string
  workflowParams: { [key: string]: any }
  workspaceType: string
}

/**
 * TensorArtV1DTO
 */
export interface TensorArtv1dto {
  adetailer: Adetailerdto
  animateDiff: { [key: string]: any }
  baseModel: BaseModeldto
  /**
   * 提示词相关性(CFG Scale)
   */
  cfgScale: string
  /**
   * clipSkip
   */
  clipSkip: string
  controlnet: { [key: string]: any }
  denoisingStrength: number
  embeddingModels: Modelsdto[]
  enableElla: boolean
  enableHr: boolean
  enablePix2pix: boolean
  /**
   * ENSD
   */
  etaNoiseSeedDelta: number
  /**
   * 尺寸高度
   */
  height: string
  hrResizeX: string
  hrResizeY: string
  hrScale: string
  hrSecondPassSteps: string
  hrUpscaler: string
  imageCount: string
  images: { [key: string]: any }[]
  inpaint: { [key: string]: any }
  ksamplerName: string
  loraBlockWeight: { [key: string]: any }
  models: Modelsdto[]
  /**
   * 否定词
   */
  negativePrompt: string
  /**
   * 提示词
   */
  prompt: string
  /**
   * 采样器
   */
  samplerName: string
  schedule: string
  /**
   * VAE
   */
  sdVae: string
  sdxl: Sdxldto
  /**
   * 随机种子
   */
  seed: string
  /**
   * 迭代步数
   */
  steps: string
  useHunYuanDit: boolean
  v1Clip: boolean
  /**
   * 尺寸宽度
   */
  width: string
  workEngine: string
}

/**
 * AdetailerDTO
 */
export interface Adetailerdto {
  args: Argsdto[]
  enableAdetailer: boolean
}

/**
 *
 * com.glasssix.spa.aigc.server.domain.tushi.GenerationData.TensorArtV1DTO.AdetailerDTO.ArgsDTO
 *
 * ArgsDTO
 */
export interface Argsdto {
  adCfgScale: number
  adCheckpoint: { [key: string]: any }
  adClipSkip: { [key: string]: any }
  /**
   * 置信度
   */
  adConfidence: number
  adControlnetGuidanceEnd: number
  adControlnetGuidanceStart: number
  adControlnetModel: string
  adControlnetWeight: number
  /**
   * 重绘噪声强度
   */
  adDenoisingStrength: number
  adDilateErode: number
  adInpaintHeight: number
  adInpaintOnlyMasked: boolean
  adInpaintOnlyMaskedPadding: number
  adInpaintWidth: number
  /**
   * 重绘蒙版模糊
   */
  adMaskBlur: number
  adMaskMaxRatio: number
  adMaskMergeInvert: string
  adMaskMinRatio: number
  /**
   * ADetailer 模型，ADetailer 模型
   */
  adModel: string
  /**
   * 反向提示词
   */
  adNegativePrompt: string
  adNoiseMultiplier: { [key: string]: any }
  /**
   * 正向提示词
   */
  adPrompt: string
  adRestoreFace: boolean
  adSampler: { [key: string]: any }
  adSteps: number
  adUseCfgScale: boolean
  adUseCheckpiont: { [key: string]: any }
  adUseClipSkip: { [key: string]: any }
  adUseInpaintWidthHeight: boolean
  adUseNoiseMultiplier: { [key: string]: any }
  adUseSampler: { [key: string]: any }
  adUseSteps: boolean
  adXOffset: number
  adYOffset: number
  models: { [key: string]: any }[]
}

/**
 * BaseModelDTO
 */
export interface BaseModeldto {
  /**
   * 基底模型
   */
  baseModel: string
  blockWeights: string
  hash: string
  /**
   * 图片地址
   */
  imgPath: string
  label: string
  modelFileId: string
  /**
   * 模型文件名
   */
  modelFileName: string
  /**
   * 模型id
   */
  modelId: number
  /**
   * 模型版本名
   */
  name: string
  /**
   * 类型
   */
  type: string
  weight: number
}

/**
 * com.glasssix.spa.aigc.server.domain.tushi.GenerationData.TensorArtV1DTO.ModelsDTO
 *
 * ModelsDTO
 */
export interface Modelsdto {
  /**
   * 基地模型
   */
  baseModel: string
  blockWeights: string
  hash: string
  /**
   * 图片地址
   */
  imgPath: string
  label: string
  modelFileId: string
  /**
   * 模型文件名
   */
  modelFileName: string
  /**
   * 模型id
   */
  modelId: number
  /**
   * 模型版本名
   */
  name: string
  /**
   * 类型
   */
  type: string
  weight: number
}

/**
 * SdxlDTO
 */
export interface Sdxldto {
  refiner: boolean
}
